﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Loja.Banco;
using System.Data.Objects;
using System.Windows.Forms;

namespace Loja.Aplicação
{
    class CaixaControle
    {
        public LOJA banco { get; set; }

        public CaixaControle(LOJA banco)
        {
            this.banco = banco;
        }

        public void Salvar(Caixa caixa)
        {
            banco.AddToCaixa(caixa);
            banco.SaveChanges();
        }

        public void AtualizaCaixa(Caixa caixa)
        {
            banco.SaveChanges();
        }

        public Boolean VerificaCaixaAberto() 
        {
            var consulta = from x in banco.Caixa
                           where x.DataFechamento == null && x.Desativado == false
                           select x.Caixa_ID;

            Int32 registros = consulta.Count();

            if(registros == 0)
                return true;
            else
                return false;
        }

        public Boolean VerificaCaixaAberto(Int32 caixa)
        {
            var consulta = from x in banco.Caixa
                           where x.DataFechamento == null && x.Desativado == false
                           && x.Caixa_ID == caixa
                           select x.Caixa_ID;

            Int32 registros = consulta.Count();

            if (registros == 0)
                return true;
            else
                return false;
        }

        public Boolean VerificaCaixaVendaAtual()
        {
            DateTime agora = DateTime.Now;

            DateTime s = (from x in banco.Caixa
                           where x.DataFechamento == null && x.Desativado == false
                        select x.DataAbertura).First();

            if (s.ToString("d") == agora.ToString("d"))
                return true;
            else
                return false;
        }

        public Boolean BuscaCaixaFechado(Int32 caixaParametro)
        {   //Alterado a logica da abertura do caixa, podendo a abrir qq caixa de qq dia.
            //DateTime data = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            var consulta = from x in banco.Caixa
                           where x.DataFechamento != null && x.StatusCaixa == false
                           //&& EntityFunctions.TruncateTime(x.DataFechamento) == data
                           && x.Caixa_ID == caixaParametro
                           select x.Caixa_ID;
            
            Int32 count = consulta.Count();

            if (count == 0)
                return true;
            else
                return false;
        }

        public Caixa BuscaCaixa()
        {
            Caixa caixa = (from x in banco.Caixa
                          where x.DataFechamento == null && x.Desativado == false
                          select x).First();

            return caixa;
        }

        public Caixa BuscaCaixa(Int32 caixa_id)
        {
            Caixa caixa = (from x in banco.Caixa
                           where x.Caixa_ID == caixa_id
                           select x).First();
            return caixa;
        }

        public Object BuscaCaixa(DateTime dataInicio, DateTime dataFim)
        {
            var caixa = (from x in banco.vw_Caixas
                           where (x.DataAbertura >= dataInicio && x.DataAbertura <= dataFim)
                         select new
                         {
                             x.Codigo,
                             x.DataAbertura,
                             x.DataFechamento,
                             x.StatusCaixa,
                             x.Usuario,
                             x.SaldoInicial,
                             x.TotalEntradas,
                             x.TotalSaidas,
                             x.SaldoFinal
                         });

            return (Object)caixa;
        }

        public vw_Caixas BuscaItensCaixa(Int32 caixa_id)
        {
            vw_Caixas caixa = (from x in banco.vw_Caixas
                                   where x.Codigo == caixa_id
                                   select x).First();
            return caixa;
        }
    }
}
